home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Audio, Video & Photo / Audacity 1.3.5 / audacity-win-unicode-1.3.5.exe / {app} / Plug-Ins / lowpass.ny < prev    next >
Lisp/Scheme  |  2007-11-05  |  3KB  |  93 lines

  1. ;nyquist plug-in
  2. ;version 3
  3. ;type process
  4. ;name "Low Pass Filter..."
  5. ;action "Performing Low Pass Filter..."
  6. ;info "by Dominic Mazzoni, modified by David R. Sky\nReleased under terms of the GNU General Public License Version 2\nAttenuates high frequencies above your specified cutoff frequency.\nHigher rolloff values give a sharper attenuation of frequencies above\nthe cutoff frequency. If using a rolloff of 6 dB, a [q] value greater than\ndefault 0.7 increases resonance ['ringing'] of the cutoff frequency and\ncould result in clipping.""
  7.  
  8. ;control rolloff-choice "     Rolloff [dB per octave]" choice " 3 dB, 6 dB,12 dB,18 dB,24 dB" 0
  9. ;control q "     Filter quality [q] for 6 dB rolloff" real "" 0.7071 .1 20
  10. ;control f "     Cutoff frequency [Hz]" real "" 1000 1 20000
  11.  
  12. ; note that all Nyquist lowpass functions 
  13. ; [lp, lowpass2, lowpass4, lowpass6, lowpass8]
  14. ; are defined below with -s suffix.
  15. ; This enables lowpass functions other than lp 
  16. ; to deal with stereo selection,
  17. ; and dummy q arg for all but lowpass2 
  18.  
  19. ; 3dB/octave
  20. (defun lp-s (s f q) ; dummy q arg
  21. (lp s f))
  22.  
  23. ; 6dB/octave
  24. (defun lowpass2-s (s f q)
  25. (if (arrayp s)
  26. (vector (lowpass2 (aref s 0) f q)
  27. (lowpass2 (aref s 1) f q))
  28. (lowpass2 s f q)))
  29.  
  30. ; 12dB/octave
  31. (defun lowpass4-s (s f q) ; dummy q arg
  32. (if (arrayp s)
  33. (vector (lowpass4 (aref s 0) f)
  34. (lowpass4 (aref s 1) f))
  35. (lowpass4 s f)))
  36.  
  37. ; 18dB/octave
  38. (defun lowpass6-s (s f q) ; dummy q arg
  39. (if (arrayp s)
  40. (vector (lowpass6 (aref s 0) f)
  41. (lowpass6 (aref s 1) f))
  42. (lowpass6 s f)))
  43.  
  44. ; 24dB/octave
  45. (defun lowpass8-s (s f q) ; dummy q arg
  46. (if (arrayp s)
  47. (vector (lowpass8 (aref s 0) f)
  48. (lowpass8 (aref s 1) f))
  49. (lowpass8 s f)))
  50.  
  51. ; check function: returns 1 on error
  52. (defun check (arg min max)
  53. (if (and (>= arg min) (<= arg max))
  54. 0 1))
  55.  
  56.  
  57. ; initialize blank error-msg
  58. (setf error-msg "")
  59.  
  60. ; check for erroneous q value
  61. (setf error-msg (if 
  62. (and (= rolloff-choice 1)
  63. (= (check q 0.1 20) 1))
  64. (strcat error-msg (format nil
  65. "q value ~a lies outside valid range 0.1 to 20     
  66. for your chosen rolloff of 6 dB per octave.
  67. " q))
  68. error-msg))
  69.  
  70. ; check for erroneous frequency cutoff value
  71. (setf error-msg (if 
  72. (= (check f 1 20000) 0)
  73. error-msg
  74. (strcat error-msg (format nil
  75. "Cutoff frequency ~a Hz lies outside valid range 1 to 20000.     
  76. " f))))
  77.  
  78.  
  79. (cond
  80. ((> (length error-msg) 0)
  81. (setf error-msg (strcat (format nil
  82. "Error - \n\nYou have entered at least one invalid value:
  83. ") error-msg))
  84. (format nil "~a" error-msg)) 
  85. ;
  86. (t ; perform lowpass effect
  87. (funcall (nth rolloff-choice '(lp-s lowpass2-s lowpass4-s lowpass6-s lowpass8-s)) 
  88. s f q)))
  89.  
  90. ; from previous commit
  91. ; arch-tag: c2d96e46-b4e2-47c0-9a19-761011418e02
  92.  
  93.